﻿Imports Microsoft.VisualBasic
Imports ADOEntityKYC
Imports ADOEntityAMLO103

Public Class clsRiskLevel
    Dim KYCEntities As KYCEntities = New KYCEntities
    Dim AMLO103Entity As AMLO103Entities = New AMLO103Entities
    Private objConn As System.Data.OleDb.OleDbConnection
    Private objCmd As System.Data.OleDb.OleDbCommand
    Private strConnString As String = ConfigurationManager.ConnectionStrings("GHBankAMLConnectionString").ConnectionString


    Public Function riskLevel(ByVal UniqueID As String, ByVal NameTh1 As String, ByVal NameTh2 As String, ByVal NameTh3 As String, ByVal NameEn1 As String, ByVal NameEn2 As String, ByVal NameEn3 As String, ByVal Occ1 As String, ByVal OccName1 As String, ByVal Occ2 As String, ByVal OccName2 As String, ByVal Occ3 As String, ByVal OccName3 As String, ByVal Biz1 As String, ByVal BizName1 As String, ByVal Biz2 As String, ByVal BizName2 As String, ByVal Biz3 As String, ByVal BizName3 As String, ByVal Nationality As String, ByVal NationalityName As String, ByVal incomeSource1 As String, ByVal SourceName1 As String, ByVal incomeSource2 As String, ByVal SourceName2 As String, ByVal incomeSource3 As String, ByVal SourceName3 As String, ByRef strReason As String) As Integer 'การจัดระดับความเสี่ยง

        Dim risk As Integer = 0

        If checkWork(Occ1) = True Then 'กรณีพบว่าอาชีพมีความเสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- " + OccName1 + " มีความเสี่ยง")
        End If
        If checkWork(Occ2) = True Then 'กรณีพบว่าอาชีพมีความเสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- " + OccName2 + " มีความเสี่ยง")
        End If
        If checkWork(Occ3) = True Then 'กรณีพบว่าอาชีพมีความเสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- " + OccName3 + " มีความเสี่ยง")
        End If

        If checkBiz(Biz1) = True Then
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- เป็นเจ้าของหรือถือหุ้นในธุรกิจ " + BizName1 + " มีความเสี่ยง")
        End If
        If checkBiz(Biz2) = True Then
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- เป็นเจ้าของหรือถือหุ้นในธุรกิจ " + BizName2 + " มีความเสี่ยง")
        End If
        If checkBiz(Biz3) = True Then
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- เป็นเจ้าของหรือถือหุ้นในธุรกิจ " + BizName3 + " มีความเสี่ยง")
        End If

        If checkNationality(Nationality) = True Then 'กรณีพบว่าสัญชาติมีความเสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- " + NationalityName + " เป็นสัญชาติที่มีความเสี่ยง")
        ElseIf Nationality = 202 Then
            risk = updateRisk(risk, 1)
        Else
            risk = updateRisk(risk, 2)
            strReason = sumString(strReason, "- เป็นต่างชาติ (" + NationalityName + ")")
        End If

        If checkIncomeSource(incomeSource1) = True Then 'กรณีพบว่ามีแหล่งที่มาของรายได้เสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- แหล่งที่มาของรายได้จาก " + SourceName1 + " มีความเสี่ยง")
        End If
        If checkIncomeSource(incomeSource2) = True Then 'กรณีพบว่ามีแหล่งที่มาของรายได้เสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- แหล่งที่มาของรายได้จาก " + SourceName2 + " มีความเสี่ยง")
        End If
        If checkIncomeSource(incomeSource3) = True Then 'กรณีพบว่ามีแหล่งที่มาของรายได้เสี่ยง
            risk = updateRisk(risk, 3)
            strReason = sumString(strReason, "- แหล่งที่มาของรายได้จาก " + SourceName3 + " มีความเสี่ยง")
        End If

        'If checkAmlo(Biz3) = True Then
        '    risk = updateRisk(risk, 3)
        '    strReason = sumString(strReason, "- เคยถูกรายงาน ปปง. 1-03")
        'End If

        Return risk
    End Function

    Public Function sumString(ByVal strReason As String, ByVal Reason As String) As String

        If strReason = "" Then
            strReason = Reason
        Else
            strReason += vbCr + Reason
            'strReason += Reason
        End If

        Return strReason
    End Function

    Public Function updateRisk(ByVal riskNow As Integer, ByVal risk As Integer) As Integer

        If risk > riskNow Then 'ถ้าความเสี่ยงที่พบมากกว่าความเสี่ยงปัจจุบัน
            riskNow = risk
        End If

        Return riskNow
    End Function

    Private Function checkWork(ByVal Occupation As String) As Boolean 'ตรวจสอบอาชีพที่มีความเสี่ยง
        Dim result As Boolean = False

        If Not Occupation = "" Then
            Dim qryOccupation = From b In KYCEntities.MOCCUPATION
                                     Select b.OCCCODE, b.RISK

            qryOccupation = qryOccupation.Where(Function(c) c.OCCCODE = Occupation)
            qryOccupation = qryOccupation.Where(Function(c) c.RISK = True)

            If qryOccupation.Count = 0 Then 'ไม่พบว่าเสี่ยง
                result = False
            Else 'พบว่ามีีความเสี่ยง
                result = True
            End If
            qryOccupation = Nothing

        End If

        Return result
    End Function

    Private Function checkBiz(ByVal Biz As String) As Boolean 'ตรวจสอบอาชีพที่มีความเสี่ยง
        Dim result As Boolean = False

        If Not Biz = "" Then

            Dim qryBusiness = From b In KYCEntities.MBUSINESS
                            Select b.BIZCODE, b.RISK

            qryBusiness = qryBusiness.Where(Function(c) c.BIZCODE = Biz)
            qryBusiness = qryBusiness.Where(Function(c) c.RISK = True)

            If qryBusiness.Count = 0 Then 'ไม่พบว่ามีธุรกิจที่เสี่ยง
                result = False
            Else 'พบว่ามีีความเสี่ยง
                result = True
            End If
            qryBusiness = Nothing
        End If

        Return result
    End Function

    Private Function checkNationality(ByVal Nationality As Integer) As Boolean
        'ตรวจสอบสัญชาติ

        Dim result As Boolean = Nothing
        Dim qryCountry = From c In KYCEntities.MNATIONALITY
                         Where c.NATIONCODE = Nationality And c.RISK = True
                         Select c.NATIONALITYNAME

        If qryCountry.Count = 0 Then 'ไม่พบว่ามีสัญชาติที่เสี่ยง
            result = False
        Else 'พบว่ามีีความเสี่ยง
            result = True
        End If

        qryCountry = Nothing

        Return result
    End Function

    Private Function checkIncomeSource(ByVal incomeSource As String) As Boolean
        'แหล่งที่มาของรายได้
        Dim result As Boolean = Nothing

        If Not incomeSource = "" Then
            Dim qryIncome = From c In KYCEntities.MNATIONALITY
                                    Where c.NATIONCODE = incomeSource And c.RISK = True
                                    Select c.NATIONCODE

            If qryIncome.Count = 0 Then 'ไม่พบว่ามีแหล่งที่มาของรายได้เสี่ยง
                result = False
            Else 'พบว่ามีีความเสี่ยง
                result = True
            End If

            qryIncome = Nothing
        End If

        Return result
    End Function


    Public Function checkNPO(ByVal risk As Integer, ByVal NPOCheck As Integer, ByRef strReason As String) As Integer 'เช็คความเสี่ยงกรณีเป็นหน่วยงานการกุศล

        If NPOCheck = 1 Then 'จัดตั้งน้อยกว่า 10 ปี
            risk = updateRisk(risk, 2)
            strReason = sumString(strReason, "- ระยะเวลาการจัดตั้งน้อยกว่า 10 ปี และประมาณการรายได้ต่อปีน้อยกว่า 400 ล้านบาท")
        ElseIf NPOCheck = 2 Then
            risk = updateRisk(risk, 1)
        End If

        Return risk
    End Function

    Public Function checkRegister(ByVal risk As Integer, ByVal RegisterCheck As Integer, ByRef strReason As String) As Integer 'การจดทะเบียนในตลาดหลัดทรัพย์

        If RegisterCheck = 1 Then 'จดทะเบียน
            risk = updateRisk(risk, 1)
        ElseIf RegisterCheck = 2 Then
            risk = updateRisk(risk, 2)
            strReason = sumString(strReason, "- ไม่เป็นบริษัทจดทะเบียนในตลาดหลัดทรัพย์ และรายรับมากกว่า 50% เป็นเงินสด")
        ElseIf RegisterCheck = 3 Then
            risk = updateRisk(risk, 1)
        End If

        Return risk
    End Function

    Public Function checkAmlo(ByVal Unique As String) As Boolean
        Dim result As Boolean = Nothing

        Dim qryAMLO = From c In AMLO103Entity.AMLODETAIL103
                                Where ((c.RPTIDX = 1 And c.RPTIDXTYPE = 1) Or (c.RPTIDX > 1 And Not c.RPTIDXTYPE = 1)) _
                                       And c.UNIQUEID = Unique And c.ISSEND = 1
                                Select c.UNIQUEID

        If qryAMLO.Count = 0 Then 'ไม่พบว่ามีเคยถูกรายงาน
            result = False
        Else 'พบว่าเคยถูกรายงาน
            result = True
        End If

        qryAMLO = Nothing


        Return result
    End Function

    Public Function CalculateRisk(ByVal i_list_score As Integer _
                                            , ByVal i_occu_score As Integer _
                                            , ByVal i_nation_score As Integer _
                                            , ByVal i_adr_country_score As Integer _
                                            , ByVal i_inc_country_score As Integer _
                                            , ByVal i_product_score As Integer _
                                            , ByVal i_service_score As Integer _
                                            , ByVal i_risk_ass_cdd As Integer) As Integer
        Dim ReturnValue As Integer

        objConn = New System.Data.OleDb.OleDbConnection
        objCmd = New System.Data.OleDb.OleDbCommand

        objConn.ConnectionString = strConnString

        objCmd.Connection = objConn
        objCmd.CommandType = System.Data.CommandType.StoredProcedure
        objCmd.CommandText = "kycadmin.prc_cal_risk_level"

        Try
            objCmd.Parameters.Add("i_list_score", System.Data.OleDb.OleDbType.Integer).Value = i_list_score
            objCmd.Parameters.Add("i_occu_score", System.Data.OleDb.OleDbType.Integer).Value = i_occu_score
            objCmd.Parameters.Add("i_nation_score", System.Data.OleDb.OleDbType.Integer).Value = i_nation_score
            objCmd.Parameters.Add("i_adr_country_score", System.Data.OleDb.OleDbType.Integer).Value = i_adr_country_score
            objCmd.Parameters.Add("i_inc_country_score", System.Data.OleDb.OleDbType.Integer).Value = i_inc_country_score
            objCmd.Parameters.Add("i_product_score", System.Data.OleDb.OleDbType.Integer).Value = i_product_score
            objCmd.Parameters.Add("i_service_score", System.Data.OleDb.OleDbType.Integer).Value = i_service_score
            objCmd.Parameters.Add("i_risk_ass_cdd", System.Data.OleDb.OleDbType.Integer).Value = i_risk_ass_cdd

            Dim op As New System.Data.OleDb.OleDbParameter()
            op.OleDbType = System.Data.OleDb.OleDbType.Integer
            op.Direction = System.Data.ParameterDirection.ReturnValue
            op.ParameterName = "o_risk_level"
            objCmd.Parameters.Add(op)

            objCmd.Connection.Open()
            objCmd.ExecuteNonQuery()
            ReturnValue = CStr(objCmd.Parameters("o_risk_level").Value)
            objCmd.Connection.Close()

            Return ReturnValue

        Catch ex As Exception

            Return -1
        End Try



    End Function

End Class
